package com.ruoyi.project.monitor.mapper;

import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.project.monitor.domain.SysLogininfor;
import com.ruoyi.project.monitor.form.SysLogininforForm;
import org.apache.ibatis.annotations.Update;
import tk.mybatis.mapper.additional.idlist.DeleteByIdListMapper;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.entity.Example;

import java.util.Date;
import java.util.List;

/**
 * 系统访问日志情况信息 数据层
 * 
 * @author ruoyi
 */
public interface SysLogininforMapper extends Mapper<SysLogininfor>, DeleteByIdListMapper<SysLogininfor, Long>
{
    /**
     * 新增系统登录日志
     * 
     * @param logininfor 访问日志对象
     */
    default void insertLogininfor(SysLogininfor logininfor) {
        logininfor.setLoginTime(new Date());
        insert(logininfor);
    }

    /**
     * 查询系统登录日志集合
     * 
     * @param param 访问日志对象
     * @return 登录记录集合
     */
    default List<SysLogininfor> selectLogininforList(SysLogininforForm param) {
        Example example = new Example(SysLogininfor.class);
        Example.Criteria criteria = example.createCriteria();
        if (StringUtils.isNotEmpty(param.getIpaddr())) {
            criteria.andLike("ipaddr", "%" + param.getIpaddr() + "%");
        }
        if (StringUtils.isNotEmpty(param.getStatus())) {
            criteria.andEqualTo("status", param.getStatus());
        }
        if (StringUtils.isNotEmpty(param.getUserName())) {
            criteria.andLike("userName", "%" + param.getUserName() + "%");
        }
        if (StringUtils.isNotEmpty(param.getBeginTime())) {
            criteria.andCondition("date_format(login_time, '%y%m%d') >= date_format('" + param.getBeginTime() + "', '%y%m%d')");
        }
        if (StringUtils.isNotEmpty(param.getEndTime())) {
            criteria.andCondition("date_format(login_time, '%y%m%d') <= date_format('" + param.getEndTime() + "', '%y%m%d')");
        }
        example.orderBy("infoId").desc();
        return selectByExample(example);
    }

    /**
     * 清空系统登录日志
     * 
     * @return 结果
     */
    @Update("truncate table sys_logininfor")
    int cleanLogininfor();
}
